package Solutions;

import java.util.ArrayList;
import java.util.List;

/**
 * @Classname ZeroMatrix
 * @Description TODO
 * @Date 2021/6/13 17:18
 * @Created by LengDanran
 * 编写一种算法，若M × N矩阵中某个元素为0，则将其所在的行与列清零。
 *
 *
 *
 * 示例 1：
 *
 * 输入：
 * [
 *   [1,1,1],
 *   [1,0,1],
 *   [1,1,1]
 * ]
 * 输出：
 * [
 *   [1,0,1],
 *   [0,0,0],
 *   [1,0,1]
 * ]
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/zero-matrix-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class ZeroMatrix {
    /***
     * 执行结果：
     * 通过
     * 显示详情
     *
     * 添加备注
     * 执行用时：1 ms, 在所有 Java 提交中击败了99.80% 的用户
     * 内存消耗：39.7 MB, 在所有 Java 提交中击败了91.73% 的用户
     */
    public void setZeroes(int[][] matrix) {
        List<int[]> tmp = new ArrayList<>();

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (matrix[i][j] == 0) {
                    int[] tmpArray = new int[2];
                    tmpArray[0] = i;
                    tmpArray[1] = j;
                    tmp.add(tmpArray);
                }
            }
        }
        for (int[] ints : tmp) {

            setZero(matrix, ints[0], ints[1]);
        }
    }

    public void setZero(int[][] matrix, int c, int l) {
        if (c == -1) return;
        for (int i = 0; i < matrix[0].length; i++) {
            matrix[c][i] = 0;
        }
        for (int i = 0; i < matrix.length; i++) {
            matrix[i][l] = 0;
        }
    }

    public static void main(String[] args) {
        int[][] matrix = {
                {0,1,2,0},
                {3,4,5,2},
                {1,3,1,5}
        };
        new ZeroMatrix().setZeroes(matrix);
    }
}
